﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BreukADO
{
    public partial class VoerOpdrachtUit : Form
    {
        BreukADOLinqDataContext breukADOLinqDataContext = new BreukADOLinqDataContext();
        int opdrachtID;
        List<String> leerlingen;
        List<String> klassen;
        List<int> leerlingids;
        int currentIndex;

        public VoerOpdrachtUit(int id)
        {
            InitializeComponent();
            this.opdrachtID = id;
            leerlingen = new List<String>();
            leerlingids = new List<int>();
            klassen = new List<String>();
            currentIndex = 0;
            this.progressBar1.Maximum = 100;
            t1.Interval = 1000;
        }

        private void VoerOpdrachtUit_Load(object sender, EventArgs e)
        {
            vulDGV();
            this.leerlingTableAdapter1.Fill(this.breukADODataSet.Leerling);
            vulLlnLijst();
            if (leerlingen.Count > 0)
            {
                label2.Text = leerlingen[currentIndex];
                label7.Text = "Leerling " + (currentIndex + 1) + "/" + leerlingen.Count();
            }
            if (leerlingids.Count > 0) label4.Text = leerlingids[currentIndex].ToString();
            if (klassen.Count > 0) label6.Text = klassen[currentIndex].ToString();
        }

        private void vulDGV()
        {
            this.dgvOpdrachtDetail.Columns.Clear();
            var queryResultsOpdrachtDetails = from o in breukADOLinqDataContext.OpdrachtDetails.AsEnumerable()
                                              where o.opdrachtID == this.opdrachtID
                                              select new
                                              {
                                                  OpdrachtDetailId = o.opdrachtDetailID,
                                                  Opgave = o.opgaveTekst,
                                                  Oplossing = o.oplossingTekst
                                              };
            BindingSource bs = new BindingSource();
            bs.DataSource = queryResultsOpdrachtDetails;
            this.dgvOpdrachtDetail.DataSource = null;
            this.dgvOpdrachtDetail.DataSource = bs;
            this.dgvOpdrachtDetail.Columns["OpdrachtDetailID"].Visible = false;
            this.dgvOpdrachtDetail.Columns["Oplossing"].Visible = false;
            this.dgvOpdrachtDetail.Columns.Add("antwoordKolom", "Antwoord");
            t1.Start();
        }

        private void vulLlnLijst()
        {
            DataTable dt1 = leerlingTableAdapter1.GetLeerlingByOpdrachtID(this.opdrachtID);
            if (dt1.Rows.Count > 0)
            {
                for (int i = 0; i < dt1.Rows.Count; i++)
                {
                    leerlingen.Add((String)dt1.Rows[i]["naam"]);
                    leerlingids.Add((int)dt1.Rows[i]["leerlingID"]);
                    klassen.Add((String)dt1.Rows[i]["klas"]);
                }
            }
            else
            {
                MessageBox.Show("Er zijn geen leerlingen toegewezen aan deze opdracht.");
                this.Close();
            }
        }

        private void evalueerOpl_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dgvOpdrachtDetail.Rows.Count; i++)
            {
                DataGridViewRow currentRow = dgvOpdrachtDetail.Rows[i];
                if (currentRow.Cells[3].Value == null)
                {
                    currentRow.Cells[3].Value = "X";
                }
                if (currentRow.Cells[2].Value.ToString().Equals(currentRow.Cells[3].Value.ToString()))
                {
                    currentRow.Cells[3].Style.BackColor = Color.Green;
                }
                else
                {
                    currentRow.Cells[3].Style.BackColor = Color.Red;
                }
            }
        }

        private void registreerOpl_Click(object sender, EventArgs e)
        {
            evalueerOpl_Click(sender, e);

            try
            {
                for (int i = 0; i < dgvOpdrachtDetail.Rows.Count; i++)
                {
                    DataGridViewRow currentRow = dgvOpdrachtDetail.Rows[i];
                    byte isfout = 1;
                    if (currentRow.Cells[2].Value.ToString().Equals(currentRow.Cells[3].Value.ToString())) isfout = 0;
                    this.leerlingOpdrachtDetailTableAdapter1.InsertOplQuery((String)currentRow.Cells[3].Value, isfout, this.leerlingids[currentIndex], (int)currentRow.Cells[0].Value);
                }
            }
            catch (Exception ex) { MessageBox.Show("Het resultaat kon niet worden opgeslagen.\n" + ex.StackTrace); }
            
            if (leerlingen.Count-1 == currentIndex)
            {
                MessageBox.Show("Alle leerlingen zijn aan de beurt geweest.");
                t1.Stop();
                this.opdrachtTableAdapter1.OpdrachtUitgevoerdQuery(this.opdrachtID);
                this.Close();
            }
            else
            {
                progressBar1.Value = 0;
                t1.Stop();
                vulDGV();
                currentIndex++;
                label2.Text = leerlingen[currentIndex];
                label4.Text = leerlingids[currentIndex].ToString();
                label6.Text = klassen[currentIndex].ToString();
                label7.Text = "Leerling " + (currentIndex + 1) + "/" + leerlingen.Count();
                MessageBox.Show(leerlingen[currentIndex] + " is nu aan de beurt.");
            }
        }

        private void t1_Tick(object sender, EventArgs e)
        {
            progressBar1.Increment(1);
            if (progressBar1.Value == progressBar1.Maximum)
            {
                progressBar1.Value = 0;
                t1.Stop();
                registreerOpl_Click(sender, e);
            }
        }
    }
}
